//
// Created by francklinson on 2021/10/21 AT 16:33.
//
#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <algorithm>
#include <functional>
#include <climits>
#include <string>

using namespace std;

class Solution {
public:
    vector<int> singleNumber(vector<int> &nums) {
        // 先得到所有数的异或
        int xorAns = 0;
        for (auto &x: nums) xorAns ^= x;
        // 找到这个结果中不为0的一位
        int oneBit = 1;
        while ((oneBit & xorAns) == 0)
            oneBit <<= 1;
        // 对nums中的所有数，根据这一位的0/1，决定应该分在哪一组中
        // 结果肯定是在不同的组
        // 相同的一对肯定在同一组
        int a = 0, b = 0;
        for (auto &x: nums) {
            if (x & oneBit)
                a ^= x;
            else
                b ^= x;
        }
        return vector<int>{a, b};
    }
};

int main() {
    vector<int> nums{1, 2, 1, 3, 2, 5};
    Solution solution;
    vector<int> ans = solution.singleNumber(nums);
    for (auto &x: ans) cout << x << endl;
    return 0;
}

